package main

import (
	"fmt"
	"sync"
)

// 互斥锁

var (
	x    int = 0 // 没有加锁
	y    int = 0 // 加锁
	wg   sync.WaitGroup
	lock sync.Mutex // 互斥锁
	// lock sync.Locker
)

func addToX() {
	for i := 0; i < 5000; i++ {
		x = x + 1
	}
	defer wg.Done()
}
func addToY() {
	defer wg.Done()
	for i := 0; i < 5000; i++ {
		lock.Lock() // 加锁
		y = y + 1
		lock.Unlock() // 释放锁
	}
}
func main() {
	wg.Add(4)

	go addToX()
	go addToX()

	go addToY()
	go addToY()

	wg.Wait()
	fmt.Printf("x: %v\n", x)
	fmt.Printf("y: %v\n", y)
}
